package com.kitty.game.gate.model;

import com.kitty.mina.cache.DataCache;
import org.springframework.stereotype.Service;

import java.util.LinkedList;

@Service
public class QueueUpService {

    private boolean needQueue =false;
    /**
     * 服务器在线多少人需要排队
     */
    private  int ONLINE_NUM = 1600;

    /**
     * 需要排队的时间 实际个人排队时间等于队列位置乘以QUEUE_TIME
     */
    private static final int QUEUE_TIME = 3;


    /**
     * 排队的信息
     */
    private final LinkedList<String> QueueUpInfos = new LinkedList<>();


    /**
     * 获取账号的排对位置 -1代表没有在排队
     */
    public int getIndex(String sid) {
        return QueueUpInfos.indexOf(sid)+1;
    }

    /**
     * 获取需要排队的时间 秒数
     */
    public int getQueueTime(String sid) {
        return getIndex(sid) * QUEUE_TIME;
    }

    /**
     * 把当前帐号添加到排队的队列
     */
    public int addQueue(String sid) {
        boolean success;
        do {
            success = QueueUpInfos.add(sid);
        } while (!success);
        return getIndex(sid);
    }


    /**
     * 窥探一下帐号是否到了最前面 如果到了就删除队列 返回true就可以进游戏了
     */
    public boolean peek(String sid) {
        if (sid.equals(QueueUpInfos.peek())) {
            return remove(sid);
        } else {
            return false;
        }
    }

    public boolean remove(String sid) {
        return QueueUpInfos.remove(sid);
    }

    /**
     * 是否需要排队
     */
    public boolean isNeedQueue() {
        int onlineNum = DataCache.ONLINE_ROLES.size();
        return onlineNum >= ONLINE_NUM && needQueue;
    }


    /**用于控制是否需要排队*/
    public void setNeedQueue(boolean needQueue) {
        this.needQueue = needQueue;
        /**如果远程关闭排队 清除掉排队队列*/
        if(!needQueue){
            QueueUpInfos.clear();
        }
    }

    /**设置达到多少人才需要排队*/
    public void setOnlineNum(int ONLINE_NUM) {
        this.ONLINE_NUM = ONLINE_NUM;
    }
}
